home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbdatabs / pscript.h < prev    next >
C/C++ Source or Header  |  1999-03-14  |  10KB  |  238 lines

  1. // ------------------------------- //
  2. // -------- Start of File -------- //
  3. // ------------------------------- //
  4. // ----------------------------------------------------------- //
  5. // C++ Header File Name: pscript.h 
  6. // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
  7. // Produced By: Doug Gaer 
  8. // File Creation Date: 12/17/1997
  9. // Date Last Modified: 03/15/1999
  10. // Copyright (c) 1997 Douglas M. Gaer
  11. // ----------------------------------------------------------- // 
  12. // ---------- Include File Description and Details  ---------- // 
  13. // ----------------------------------------------------------- // 
  14. /*
  15. The VBD C++ classes are copyright (c) 1997, by Douglas M. Gaer.
  16. All those who put this code or its derivatives in a commercial
  17. product MUST mention this copyright in their documentation for
  18. users of the products in which this code or its derivative
  19. classes are used. Otherwise, you have the freedom to redistribute
  20. verbatim copies of this source code, adapt it to your specific
  21. needs, or improve the code and release your improvements to the
  22. public provided that the modified files carry prominent notices
  23. stating that you changed the files and the date of any change.
  24.  
  25. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
  26. THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
  27. IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
  28. YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
  29. CORRECTION.
  30.  
  31. The PostScriptDrv class is used to create postscript documents.
  32. This version prints postscript documents to a file.
  33. */
  34. // ----------------------------------------------------------- //   
  35. #ifndef __PSCRIPT_HPP__
  36. #define __PSCRIPT_HPP__
  37.  
  38. #include <fstream.h>
  39.  
  40. // Setup postscript defaults
  41. const int DEFAULT_TAB_SIZE = 8;        // Default tab size
  42. const double DEFAULT_POINT_SIZE = 10;  // Default point size (10 pitch)
  43. const double DEFAULT_OFFSET = 0.0;     // Default inches to indent each line
  44. const double DEFAULT_LR_MARGIN = 1.0;  // Default left and right margin offset
  45. const double DEFAULT_TB_MARGIN = 1.0;  // Default top and bottom margin offset
  46. const double PRINTABLE_OFFSET_Y = 25;  // Printable area offset
  47. const double PRINTABLE_OFFSET_X = 25;  // Printable area offset
  48. const double HEADER_OFFSET = 1.0;      // Offset for header and trailer text
  49. const int THICK_LINE_WIDTH = 2;        // Line width for header lines
  50. const int LINE_WIDTH = 1;              // Line width for separator lines
  51.  
  52. // Setup postscript constants
  53. const char SEP_CHAR = '\001';   // Column separator character 
  54. const int MAXPAGES = 10000;     // Maximum number of pages per job 
  55. const int PS_EOF = 0x04;        // PostScript end of file mark
  56. const int MAX_LINES = 160;      // Maximum lines per page for documents 
  57. const int PIXELS_PER_INCH = 72; // PostScript points per inch     
  58.  
  59. // Max lines for a unix man page produced by nroff
  60. // nroff is used to format man pages under most variants of UNIX
  61. const int UNIX_MAN_PAGE_LINES = 66;   
  62.  
  63. // Setup input/output buffer sizes for postscript documents
  64. const int MAX_LINE = 256; // No PostScript line can exceed 256 characters
  65. const int BUFIN = 1024;   // Maximum length of an input line 
  66. const int BUFOUT = (BUFIN * 5);
  67.  
  68. // Standalone function used to create a custom time string
  69. // for PostScript headers.
  70. void GetSystemTime(char *s, int full_month_name = 1);
  71.  
  72. const int NumberOfFonts = 13;      // Number of fonts to support
  73.  
  74. // (P)ostscript (D)river class
  75. class PostScriptDrv
  76. {
  77. public:
  78.   enum PSFonts {
  79.     // Most PostScript products include software for 13 standard fonts:
  80.     // Courier, Times, Helvetica, and Symbol families.
  81.     
  82.     // Courier fonts
  83.     COURIER,              // Courier
  84.     COURIER_BOLD,         // Courier-Bold
  85.     COURIER_OBLIQUE,      // Courier-Oblique
  86.     COURIER_BOLD_OBLIQUE, // Courier-BoldOblique
  87.  
  88.     // Times-Roman fonts
  89.     TIMES,             // Times-Roman
  90.     TIMES_BOLD,        // Times-Bold
  91.     TIMES_ITALIC,      // Times-Italic
  92.     TIMES_BOLD_ITALIC, // Times-BoldItalic
  93.  
  94.     // Helvetica fonts
  95.     HELV,                      // Helvetica
  96.     HELV_BOLD,                 // Helvetica-Bold
  97.     HELV_OBLIQUE,              // Helvetica-Oblique
  98.     HELV_BOLD_OBLIQUE,         // Helvetica-BoldOblique
  99.  
  100.     // Symbol font
  101.     SYMBOL                     // Symbol
  102.   };
  103.  
  104.   enum PSPaperSizes {
  105.     // Non-metric Traditional Paper Sizes used in Canada and the
  106.     // United States. Sheet sizes accommodate 1/8" (3 mm) head,
  107.     // foot, and fore edge trim margins (width precedes height).
  108.     // Decimal inches multiplied by 25.4 to convert to approximate mm.
  109.     // N.B. Fractional mm measures must be rounded to the nearest
  110.     // whole number.
  111.     LETTER_SIZE,  // 8.5 x 11 inches 
  112.     LEGAL_SIZE,   // 8.5 x 14 inches 
  113.     TABLOID_SIZE, // 11 x 17 inches  
  114.  
  115.     // ISO/DIN and JIS Standard Paper Sizes Trim sizes in mm.
  116.     // Width precedes height. Sheet sizes accommodate 3 mm head,
  117.     // foot, and fore edge trim margins. To convert to approximate
  118.     // decimal inches, divide measures by 25.4.
  119.     A3_SIZE, // 297mm x 420mm (11.70" X 16.55")
  120.     A4_SIZE  // 210mm x 297mm (8.27" X 11.70")
  121.   };
  122.  
  123. public:
  124.   PostScriptDrv();
  125.   ~PostScriptDrv() { }
  126.   PostScriptDrv(const PostScriptDrv &ob);
  127.   PostScriptDrv &operator=(const PostScriptDrv &ob);
  128.   
  129. public: // Document setup functions
  130.   void DocumentSetup(double LR_margin = 0, double TB_margin = 0, int man = 0);
  131.   void SetFont(PSFonts font, double size);
  132.   void SetPaperSize(PSPaperSizes size);
  133.   void UseLRMargin() { use_lr_margin = 1; } // Use left and right margins
  134.   void UseTBMargin() { use_tb_margin = 1; } // Use top and bottom margins
  135.   void NoMargins() { use_lr_margin = use_tb_margin = 0; }
  136.   void LandScapeMode() { landscape = 1; }
  137.   void PortraitMode() { landscape = 0; }
  138.   void Copies(int num) { ncopies = num; }
  139.   void SetTabStop(int num) { tabstop = num; }
  140.   int StringLen(char *s, int charWidth);
  141.   int StringLen(const char *s, int charWidth);
  142.  
  143. public: // Document parameters
  144.   double CharsPerInch() { return chars_per_inch; }
  145.   double CharWidth() { return char_width; }
  146.   char *TextFont() { return text_font; }
  147.   double FontSize() { return font_size; }
  148.   int PageWidth() { return page_width; }
  149.   int PageHeight() { return page_height; }
  150.   int LinesPerPage() { return lines_per_page; }
  151.   int Columns() { return columns; }
  152.   int StartX() { return start_x; }
  153.   int StartY() { return start_y; }
  154.   int NCopies() { return ncopies; }
  155.   int TabStop() { return tabstop; }
  156.   int UsingLRMargin() { return use_lr_margin; }
  157.   int UsingTBMargin() { return use_tb_margin; }
  158.   int GetMode() { return landscape; }    // Returns true if using landscape 
  159.  
  160. public: // Document header and trailer infomation 
  161.   void UseHeader() { use_header = 1; }
  162.   int UsingHeader() { return use_header; }
  163.   char *HeaderFont() { return header_font; }
  164.   double HeaderFontSize() { return header_font_size; }
  165.   void SetHeaderFont(PSFonts font, double size);
  166.   void SetDocumentName(char *s) { document_name = s; }
  167.   void SetDocumentName(const char *s) { document_name = (char *)s; }
  168.   void SetDateString(char *s) { date_string = s; }
  169.   void SetDateString(const char *s) { date_string = (char *)s; }
  170.   void DrawHeaderLine() { draw_header_line = 1; }
  171.   
  172. public: // Postscript printing functions 
  173.   void Epilogue(ostream &stream, int page_count);
  174.   void EndPage(ostream &stream);
  175.   void StartPage(int n, ostream &stream);
  176.   void drawLine(ostream &stream, int points, int xpos, int ypos);
  177.   void drawThickLine(ostream &stream, int points, int xpos, int ypos);
  178.   void MoveTo(ostream &stream, int x, int y);
  179.   void ChangeFont(ostream &stream, PSFonts font, double size);
  180.   int ConvertTextFile(ifstream &infile, ostream &stream,
  181.               int wrap = 0, int cut = 1);
  182.   int ProcessText(char *in, ostream &stream, int cut = 1, int filter = 0);
  183.   int PrintLine(char *in, ostream &stream);
  184.   int PrintLine(char *s, unsigned max_len, ofstream &stream);
  185.   
  186.   // Generates the PostScript header and includes the prologue.
  187.   // Arguments are: pn - Program Name, h